package de.preiscrawler.parser.artikeldetail;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import net.htmlparser.jericho.Element;
import net.htmlparser.jericho.Source;
import de.preiscrawler.AlleAnbieter;
import de.preisrobot.business.parser.AbstractArtikelDetailParser;
import de.preisrobot.entity.ArtikelDetail;
import de.preisrobot.entity.ArtikelProperty;
import de.preisrobot.service.internal.PreisRobotParserException;

public class NotebooksBilligerArtikelDetailParser extends AbstractArtikelDetailParser
{

   @Override
   protected ArtikelDetail parseStream( InputStream in) throws IOException, PreisRobotParserException
   {
      ArtikelDetail detail = new ArtikelDetail();
      
      Source s = new Source(in);
      Element tableArtikelProperies = s.getElementById("p_properties");
      List<Element> allElementsByClass = s.getAllElementsByClass("content");
    
      allElementsByClass.get(0);

      Set<ArtikelProperty> list = parseArtikelEigenschaften(tableArtikelProperies);     
      String preis = parsePreis(s);
      
      detail.setProperties(list);
      detail.setPreis(preis);
      return detail;
   }

   @Override
   protected String parsePreis(Source source)
   {
      Element imgElem = source.getElementById("products_price");
      String preis = imgElem.getAttributeValue("alt");
      return preis;
   }

   public int getAnbieter()
   {
      return AlleAnbieter.NOTEBOOKSBILLIGER;
   }

   @Override
   protected   Set<ArtikelProperty> parseArtikelEigenschaften(Element rootArtikelItem)
   {
      Set<ArtikelProperty> pList = new HashSet<ArtikelProperty>();
      
   
      Element element = rootArtikelItem;
      List<Element> allElements = element.getAllElements("table");
      Element table = allElements.get(0);

      //         List<Element> propertieKeys = table.getAllElementsByClass("produktDetails_eigenschaft1");

      List<Element> allTableRows = table.getAllElements("td");

      int sortierung = 0;
      ArtikelProperty prop = new ArtikelProperty();
      for (Element tr : allTableRows)
      {
        
         String attributeValue = tr.getAttributeValue("class");
         
         String wert = tr.getTextExtractor().toString();

         if ("produktDetails_eigenschaft1".equals(attributeValue))
         {
            prop.setHauptkategorie(wert);
            sortierung = 0;
            prop.setSortierung(++sortierung); 
         }
         else if ("produktDetails_eigenschaft2".equals(attributeValue))
         {
            prop.setBezeichnung(wert);
            prop.setSortierung(++sortierung); 
         }
         else if ("produktDetails_eigenschaft3".equals(attributeValue))
         {
            if("".equals(wert))
               continue;
            
            prop.setWert(wert);
            prop.setSortierung(++sortierung); 

            pList.add(prop);
            prop = new ArtikelProperty();
         }

            
     
      }
      
      return pList;
   }

}
